﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Web;
using Crosland.Automotriz.Logic.Funciones;


namespace Crosland.Automotriz.Logic
{
    public class FormatingTXTContabilidad
    {

        public void FormatoContabilidadTXT()
        {
            string line;
            //string rutaArchivo = @"D:\PRD00000245301.txt";
            string lineaReplace;
            string archivoLectura = HttpContext.Current.Server.MapPath("~/Archivos Excel SSIS");
            string archivoEscritura = HttpContext.Current.Server.MapPath("~/Archivos Excel SSIS");
            string archivo;
            DirectoryInfo files = new DirectoryInfo(archivoLectura);
            string[] txtList = Directory.GetFiles(archivoLectura, "FBL3N_ORIG_*.txt");

            int glosaPosIni, glosaTamaño;
            int refPosIni, refTamaño;
            int lineaTamaño = 0, posIni1, posIni2, posIni3, posIni4, posIni5,cadena2Tam,cadena3Tam;
            String glosaNew="", refNew="";
            glosaPosIni = 272;  // cadena empieza desde posicion 0
            glosaTamaño = 56;

            refPosIni = 341; // Cadena empieza desde posicion 0
            refTamaño = 35;
            posIni1 = 0;
            posIni2 = glosaPosIni;
            posIni3 = posIni2 + glosaTamaño - 2;
            posIni4 = refPosIni;
            posIni5 = posIni4 + refTamaño - 1;
            cadena2Tam = posIni4 - posIni3;
            
            //string s = "012345";

            foreach (var fi in files.GetFiles())
            {
                if (fi.Extension.ToUpper() == ".TXT")
                {
                    archivo = fi.FullName;

                    // Read the file and display it line by line.
                    StreamReader file = new StreamReader(archivo);
                   

                    while ((line = file.ReadLine()) != null)
                    {

                        if (line == " Cta.mayor               *")
                        {
                            lineaReplace = line.Replace(" Cta.mayor               *", "");
                        }
                        else if (line == " Sociedad                *")
                        {
                            lineaReplace = line.Replace(" Sociedad                *", "");
                        }
                        else if (line.Contains("---------------------------------------------"))
                        {
                            lineaReplace = "";
                        }
                        else if (line.Contains("|  Soc.   |Libro mayor  |Nombre 1              |"))
                        {
                            lineaReplace = "";
                        }
                        else if (line.Contains("|-------------------------------------"))
                        {
                            lineaReplace = "";
                        }
                        else if (line.Contains("||"))
                        {

                            lineaReplace = line.Replace("||", "| ");
                        }
                        else if (line.Contains(" Cta.mayor"))
                        {
                            lineaReplace = "";
                        }
                        else if (line.Contains(" Sociedad"))
                        {
                            lineaReplace = "";
                        }
                        else
                        {
                            lineaReplace = line;
                        }

                        #region


                        //if (lineaReplace.Contains("600002776 ") || lineaReplace.Contains("600002776 ") || lineaReplace.Contains("600002776 "))
                        //{
                        //    String p;
                        //    p = lineaReplace.Substring(1, 4);
                        //}

                        ///*
                        // *  Reemplaza valores extraños en columna referencia 
                        // */
                        ////if (lineaReplace.Length >228)
                        //int actualiza_glosa = 0;
                        //if (lineaReplace.Length >= refPosIni)
                        //{

                        //    // redusco en 1 el tamaño y agrego un espacio para evitar tocar la columna siguiente
                        //    glosaNew = lineaReplace.Substring(glosaPosIni, glosaTamaño - 1) + "  "; 

                        //    //if (glosaNew.Substring(glosaNew.Length - 1, 1) == "|")
                        //    //{
                        //    //    glosaNew = lineaReplace.Substring(glosaPosIni - 1, glosaTamaño) + "";
                        //    //}

                        //    if (glosaNew.Contains("|"))
                        //    {
                        //        glosaNew = glosaNew.Replace("|", " ");
                        //        int tamGlosaNew = glosaNew.Length;
                        //        actualiza_glosa = 1;
                        //        //lineaReplace = lineaReplace.Replace(lineaReplace.Substring(glosa_pos_ini, glosa_pos_desplazamiento), Cadena1);
                        //    }
                        //    // redusco en 1 el tamaño y agrego un espacio para evitar tocar la columna siguiente
                        //    refNew = lineaReplace.Substring(refPosIni, refTamaño - 1) + "  ";
                            

                        //    //if (refNew.Substring(refNew.Length - 1, 1) == "|")
                        //    //{
                        //    //    refNew = lineaReplace.Substring(refPosIni - 1, refTamaño) + "";
                        //    //}


                        //    if (refNew.Contains("|"))
                        //    {
                        //        refNew = refNew.Replace("|", " ");
                        //        int tamRefNew = refNew.Length;
                        //        actualiza_glosa = 1;
                        //        //lineaReplace = lineaReplace.Replace(lineaReplace.Substring(referencia_pos_ini, referencia_nro_desplazamiento), refe1);
                        //    }

                        //    if (actualiza_glosa == 1)
                        //    {
                        //        lineaTamaño = lineaReplace.Length;
                        //        cadena3Tam = lineaTamaño - posIni5;
                        //        string lineaReplaceNew = "";

                        //        String cadena1 = lineaReplace.Substring(0, posIni2);
                        //        String cadena2 = lineaReplace.Substring(posIni3, cadena2Tam);
                        //        String cadena3 = lineaReplace.Substring(posIni5, cadena3Tam);
                        //        cadena3Tam = lineaTamaño - posIni5;

                        //        lineaReplaceNew = cadena1 + glosaNew + cadena2 + refNew + cadena3;

                        //        int tamlineaNew = lineaReplaceNew.Length;

                        //        lineaReplace = lineaReplaceNew;
                        //    }
                        //}

                        #endregion
                        //String reemplaza_acentos;


                        //if (lineaReplace.Length > 228) {
                        
                        if (lineaReplace.Length >= glosaPosIni) {
   
                            if (lineaReplace.Contains("Á"))
                            {
                                lineaReplace = lineaReplace.Replace("Á", "A");
                                //String colglosa = lineaReplace.Substring(glosa_pos_ini, glosa_pos_desplazamiento);
                                //lineaReplace = lineaReplace.Replace(lineaReplace.Substring(glosa_pos_ini, glosa_pos_desplazamiento), colglosa + "");

                            }
                            if (lineaReplace.Contains("á"))
                            {
                                lineaReplace = lineaReplace.Replace("á", "a");
                                //String colglosa = lineaReplace.Substring(glosa_pos_ini, glosa_pos_desplazamiento);
                                //lineaReplace = lineaReplace.Replace(lineaReplace.Substring(glosa_pos_ini, glosa_pos_desplazamiento), colglosa + "");

                            }

                            if (lineaReplace.Contains("É"))
                            {
                                lineaReplace = lineaReplace.Replace("É", "E");
                                //String colglosa = lineaReplace.Substring(glosa_pos_ini, glosa_pos_desplazamiento);
                                //lineaReplace = lineaReplace.Replace(lineaReplace.Substring(glosa_pos_ini, glosa_pos_desplazamiento), colglosa + "");

                            }
                            if (lineaReplace.Contains("é"))
                            {
                                lineaReplace = lineaReplace.Replace("é", "e");
                                //String colglosa = lineaReplace.Substring(glosa_pos_ini, glosa_pos_desplazamiento);
                                //lineaReplace = lineaReplace.Replace(lineaReplace.Substring(glosa_pos_ini, glosa_pos_desplazamiento), colglosa + "");
                            }

                            if (lineaReplace.Contains("Í"))
                            {
                                lineaReplace = lineaReplace.Replace("Í", "I");
                                //String colglosa = lineaReplace.Substring(glosa_pos_ini, glosa_pos_desplazamiento);
                                //lineaReplace = lineaReplace.Replace(lineaReplace.Substring(glosa_pos_ini, glosa_pos_desplazamiento), colglosa + "");

                            }
                            if (lineaReplace.Contains("í"))
                            {
                                lineaReplace = lineaReplace.Replace("í", "i");
                                //String colglosa = lineaReplace.Substring(glosa_pos_ini, glosa_pos_desplazamiento);
                                //lineaReplace = lineaReplace.Replace(lineaReplace.Substring(glosa_pos_ini, glosa_pos_desplazamiento), colglosa + "");

                            }

                            if (lineaReplace.Contains("Ó"))
                            {
                                lineaReplace = lineaReplace.Replace("Ó", "O");
                                //String colglosa = lineaReplace.Substring(glosa_pos_ini, glosa_pos_desplazamiento);
                                //lineaReplace = lineaReplace.Replace(lineaReplace.Substring(glosa_pos_ini, glosa_pos_desplazamiento), colglosa + "");

                            }
                            if (lineaReplace.Contains("ó"))
                            {
                                lineaReplace = lineaReplace.Replace("ó", "o");
                                //String colglosa = lineaReplace.Substring(glosa_pos_ini, glosa_pos_desplazamiento);
                                //lineaReplace = lineaReplace.Replace(lineaReplace.Substring(glosa_pos_ini, glosa_pos_desplazamiento), colglosa + "");

                            }

                            if (lineaReplace.Contains("Ú"))
                            {
                                lineaReplace = lineaReplace.Replace("Ú", "U");
                                //String colglosa = lineaReplace.Substring(glosa_pos_ini, glosa_pos_desplazamiento);
                                //lineaReplace = lineaReplace.Replace(lineaReplace.Substring(glosa_pos_ini, glosa_pos_desplazamiento), colglosa + "");

                            }
                            if (lineaReplace.Contains("ú"))
                            {
                                lineaReplace = lineaReplace.Replace("ú", "u");
                                //String colglosa = lineaReplace.Substring(glosa_pos_ini, glosa_pos_desplazamiento);
                                //lineaReplace = lineaReplace.Replace(lineaReplace.Substring(glosa_pos_ini, glosa_pos_desplazamiento), colglosa + "");

                            }

                            if (lineaReplace.Contains("�"))
                            {
                                lineaReplace = lineaReplace.Replace("�", "o");
                                //String colglosa = lineaReplace.Substring(glosa_pos_ini, glosa_pos_desplazamiento);
                                //lineaReplace = lineaReplace.Replace(lineaReplace.Substring(glosa_pos_ini, glosa_pos_desplazamiento), colglosa + "");

                            }

                            if (lineaReplace.Contains("Ã‘")) //Ñ
                            {
                                lineaReplace = lineaReplace.Replace("Ã‘", "N ");                            
                            }

                            if (lineaReplace.Contains("Ñ"))
                            {
                                lineaReplace = lineaReplace.Replace("Ñ", "N");
                            }
                            if (lineaReplace.Contains("ñ"))
                            {
                                lineaReplace = lineaReplace.Replace("ñ", "n");
                            //    String colglosa = lineaReplace.Substring(glosa_pos_ini, glosa_pos_desplazamiento);
                            //    lineaReplace = lineaReplace.Replace(lineaReplace.Substring(glosa_pos_ini, glosa_pos_desplazamiento), colglosa + "");

                            }


                        }

                       

                        
                        if (lineaReplace.Length > 0)
                        {
                            int totCaracter = Convert.ToInt32(fi.Name.Length);
                            StreamWriter sw = new System.IO.StreamWriter(archivoEscritura + "\\" + "FBL3N_FORMATO_" + LeftRightMid.Right(fi.Name, totCaracter - 11), true);
                            sw.WriteLine(lineaReplace);

                            sw.Close();

                        }


                        //counter++;
                    }

                    file.Close();       

                }

            }

            //Elimina los archivos de textos sin formato.
            foreach (string f in txtList)
            {
                File.Delete(f);
            }

        }



        public void FormatoContabilidadDeudorTXT()
        {
            string line;
            string lineaReplace;
            string archivoLectura = HttpContext.Current.Server.MapPath("~/Archivos Excel SSIS");
            string archivoEscritura = HttpContext.Current.Server.MapPath("~/Archivos Excel SSIS");
            string archivo;
            DirectoryInfo files = new DirectoryInfo(archivoLectura);
            string[] txtList = Directory.GetFiles(archivoLectura, "FBL5N_ORIG_*.txt");
            foreach (var fi in files.GetFiles())
            {
                if (fi.Extension.ToUpper() == ".TXT")
                {
                  
                    archivo = fi.FullName;
                    using (StreamReader file = new StreamReader(archivo))
                    {
                        while ((line = file.ReadLine()) != null)
                        {
                            if (line.Contains("|   Soc.   |  Ejercicio|"))
                            {
                                lineaReplace = "";
                            }
                            else if (line.Contains("|  Soc.   |"))
                            {

                            lineaReplace = "";
                            }
                            else
                                if (line.Contains("|-------------------------------------"))
                                {
                                    lineaReplace = "";
                                }
                                else
                                    if (line.Contains("----------------------------------------------------------"))
                                    {
                                        lineaReplace = "";
                                    }
                                    else if (line.Contains("||")) {
                                        
                                        lineaReplace = line.Replace("||", "| ");
                                    }
                                    else
                                        if (line.Contains("|  *       |           |          |      |           |"))
                                        {
                                            lineaReplace = "";
                                        }
                                        else
                                        {
                                            lineaReplace = line;
                                        }





                            if (lineaReplace.Length>235)
                            {
                                String colglosa = lineaReplace.Substring(236, 57);

                                if (colglosa.Contains("|"))
                                {
                                    String Cadena1 = colglosa.Replace("|", "/");
                             
                                    lineaReplace = lineaReplace.Replace(lineaReplace.Substring(236, 57), Cadena1);


                                }

                                String colreferencia = lineaReplace.Substring(339, 52);

                                if (colreferencia.Contains("|"))
                                {
                                    String refe1 = colreferencia.Replace("|", "/");
                                
                                    lineaReplace = lineaReplace.Replace(lineaReplace.Substring(339, 52), refe1);
                                }


                            }




                            if (lineaReplace.Length > 0)
                            {
                                int totCaracter = Convert.ToInt32(fi.Name.Length);
                                using (StreamWriter sw = new System.IO.StreamWriter(archivoEscritura + "\\" + "FBL5N_FORMATO_" + LeftRightMid.Right(fi.Name, totCaracter - 11), true))
                                {
                                    sw.WriteLine(lineaReplace);
                                    sw.Close();
                                }
                            }
                        }
                        file.Close();
                    }
                }
            }
            foreach (string f in txtList)
            {
                File.Delete(f);
            }
        }

    }
}
